package com.voxel.sense.infomsg.widget.map.utils;

import android.graphics.drawable.Drawable;

import com.amap.api.maps.AMap;
import com.amap.api.maps.model.Marker;
import com.voxel.sense.infomsg.interfaces.listener.onAddMarkerListener;
import com.voxel.sense.infomsg.utils.cover.EntityConvertStrategy;

import java.util.List;
import java.util.Map;

/**
 * Created by ChenYiYao on 2018/6/4.
 */
public interface IMarkerManage<T> {

    /**
     * 初始化装载marker集合的map数据集
     */
    void initMapData();


    /**
     * 添加
     *
     * @param list
     * @param type
     */
    void addMarkers(List<T> list, String type, Drawable drawable, EntityConvertStrategy strategy);

    void addMarkers(List<T> list, String type, EntityConvertStrategy strategy);

    /**
     * 添加
     *
     * @param data
     * @param type
     */
    void addMarker(T data, String type, EntityConvertStrategy strategy);

    void addMarker(T data, String type, Drawable drawable, EntityConvertStrategy strategy);

    /**
     * 刷新某类型的marker
     *
     * @param list
     */
    void refreshMarkers(List<Marker> list, String type, EntityConvertStrategy strategy);


    /**
     * 移除某类型的marker
     *
     * @param list
     */
    boolean removeMarkers(List<Marker> list, String type);


    /**
     * 移除所有
     */
    boolean cleanMarkers();

    /**
     * 设置某种类型的marker是否可见
     *
     * @param type          类型
     * @param visible       是否可见
     * @param foreceRefData 是否强制刷新数据源
     */
    void setSomeTypeMarkersVisible(String type, boolean visible, boolean foreceRefData);


    /**
     * 获取某个类型的marker
     */
    List<Marker> getMarkers(String type);

    /**
     * 在activity的destory方法设置该方法，这样再添加marker时
     * 若销毁了，则不会再添加
     */

    void onDestory();

    /**
     * 在activity的destory方法设置该方法，这样再添加marker时
     * 若销毁了，则不会再添加
     */
    void setaMap(AMap aMap);

    void setMarkerClickListener(OnCtmMarkerClickListener listener);


    /**
     * 设置某种类型下的某些marker是否可见
     */
    void setSameIdMarkersVisible(String type, String id, boolean visible);

    /**
     * 设置marker的图标
     *
     * @param drawables
     */
    void putDrawables(Map<String, Drawable> drawables);

    /**
     * 添加marker监听
     *
     * @param addMarkerListener
     */
    void setAddMarkerListener(onAddMarkerListener addMarkerListener);

}
